package com.GraduationDesign.backend.data.diff;

import com.GraduationDesign.backend.po.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author: wzx
 * @date: 2022/4/14
 */
@Mapper
@Repository
public interface DiffMapper {

    /**
     * 添加代码块信息
     * @param blockInfo 代码块信息
     */
    void addBlock(BlockInfo blockInfo);

    /**
     * 添加link信息
     * @param tempLink 代码块link信息
     */
    void addLink(TempLink tempLink);

    /**
     * 添加comment信息
     * @param comment  代码块comment信息
     */
    void addComment(Comment comment);

    /**
     * 获取某代码块信息
     * @param reviewId reviewId
     * @param codeId 代码块号
     * @return 获取代码块信息
     */
    BlockInfo getBlockInfo(@Param("reviewId")Integer reviewId,@Param("codeId")Integer codeId);

    /**
     * 获取对应代码块评论
     * @param reviewId reviewId
     * @param codeId 代码块号
     * @return 评论所有信息列表
     */
    List<Comment> getComments(@Param("reviewId")Integer reviewId,@Param("codeId")Integer codeId);

    /**
     * 获取对应代码块跳转信息
     * @param reviewId reviewId
     * @param codeId 代码块号
     * @return 链接
     */
    TempLink getLink(@Param("reviewId")Integer reviewId,@Param("codeId")Integer codeId);


    /**
     * 获取代码块列表信息
     * @param path 文件路径
     * @param group 组号
     * @return 代码块信息
     */
    List<BlockInfo> getBlocks(@Param("path") String path,@Param("groupId")Integer group,@Param("reviewId") Integer reviewId);

    /**
     * 返回文件列表
     * @param reviewId 评审id
     * @return 文件列表
     */
    List<DiffFile> getDiffFileList(@Param("reviewId") Integer reviewId);

    /**
     * 获取对应代码块信息
     * @param reviewId 获取link块信息
     * @param codeId 代码块
     * @return link到的块信息
     */
    List<LinkInfo> getLinkInfo(@Param("reviewId") Integer reviewId,@Param("codeId") Integer codeId);

    /**更新代码块信息
     * @param reviewId  评审id
     * @param codeId 代码块id
     * @param groupId 组号id
     */
    void updateCodeInfo(@Param("reviewId") Integer reviewId,@Param("codeId") Integer codeId,@Param("groupId") Integer groupId);
    void deleteBlocks(@Param("reviewId") Integer reviewId);
    void deleteLinks(@Param("reviewId") Integer reviewId);
    void deleteComments(@Param("reviewId") Integer reviewId);



}
